<?php
// +-------------------------------- 订单信息表  --------------------------------------
declare(strict_types=1);

namespace app\model;

use think\Model;

class Orders extends Model
{
    // 自动时间戳写入
    protected $autoWriteTimestamp = 'datetime';

    protected $createTime = 'create_time';
    protected $updateTime = false; // 没有 update_time 字段

    protected $type = [
        'id'               => 'integer',
        'order_id'         => 'string',
        'user_id'          => 'string',
        'goods_id'         => 'string',
        'create_time'      => 'datetime',
        'order_status'     => 'integer', // 订单状态【0:待付款，1：待发货，2：待收货，3：售后，4：完成, 5:已取消】
        'should_price'     => 'float', // 应付金额
        'real_price'       => 'float', // 实付金额
        'use_coupon'       => 'integer', // 是否使用优惠券【0:未使用，1：已使用】
        'coupon_id'        => 'string', // 优惠券ID
        'logistics_number' => 'string', // 物流单号
        'number'           => 'integer', // 商品数量
        'ali_pay_id'       => 'string', // 支付宝交易号
        'address'          => 'string', // 收货地址ID
    ];

    /**
     * 定义订单与商品的关联关系
     * 
     * @return \think\model\relation\HasOne
     */ 
    public function goods()
    {
        return $this->hasOne('Goods', 'goods_id', 'goods_id');
    }

    // 关联用户表
    public function user()
    {
        return $this->hasOne('UserInfos', 'user_id', 'user_id');
    }

    /**
     * 定义订单与订单规格的关联关系
     * 
     * @return \think\model\relation\HasMany
     */
    public function orderSpecifications()
    {
        return $this->hasMany('OrderSpecifications', 'order_id', 'order_id');
    }

    // 关联地址
    public function address()
    {
        return $this->hasOne('UserAddress', 'id', 'address');
    }

    // 关联优惠券
    public function coupon()
    {
        return $this->hasOne('Coupon', 'coupon_id', 'coupon_id');
    }
    
    /**
     * 定义订单状态获取器，可以将数字状态转换为文字描述
     * 
     * @param int $value
     * @return string
     */
    public function getOrderStatusTextAttr($value, $data)
    {
        $status = [
            0 => '待付款',
            1 => '待发货',
            2 => '待收货',
            3 => '售后中',
            4 => '已完成',
            5 => '已取消'
        ];
        
        return isset($status[$data['order_status']]) ? $status[$data['order_status']] : '未知状态';
    }

}
